package com.wang.tool.delivery;

import com.wang.tool.delivery.base.DeliveryBox;
import com.wang.tool.delivery.cache.module.ModuleCacheDTO;
import com.wang.tool.delivery.cache.page.PageCacheDTO;
import com.wang.tool.delivery.cache.plan.PlanCacheDTO;
import com.wang.tool.delivery.cache.resource.ResourceCacheDTO;
import com.wang.tool.delivery.cache.scene.SceneCacheDTO;
import com.wang.tool.delivery.res.SceneResult;

import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;

/**
 * @author shaopeng
 * @date 2022/8/9
 */
public interface DeliveryPlugin {

    /**
     * 场景挂载
     * 智能ui
     * @param scene
     * @param box
     * @return
     */
    CompletableFuture<Consumer<SceneResult>> sceneMount(SceneCacheDTO scene, String subjectId,DeliveryBox box);

    /**
     * 扩展配置是否齐全
     * tab类区块必须要有tab配置才生效
     * 例如只加载指定页面配置
     * @param page
     * @param module
     * @param box
     * @return
     */
    boolean moduleIsValidWithStatic(PageCacheDTO page, ModuleCacheDTO module, DeliveryBox box);


    /**
     * 排期过滤
     * 同类型取一个
     * @param plans
     * @param box
     */
    void filterPlanAfterFixedOpen(ResourceCacheDTO resource,List<PlanCacheDTO> plans, DeliveryBox box);

}
